<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
	<xsl:output method="text" encoding="utf-8" indent="no"/>
	
<!--
	    Template:           servlet
		To do:         servlet insert
		Author:           Hoang
		Created Date:    19 June 2011.
		Last Modified:   19 June 2011.
		Notes: ...
-->
	<xsl:variable name="tableName" select="report/header/title/text()"/>
	
	<xsl:template match="/">
		<xsl:text>import java.io.BufferedReader;&#xa;</xsl:text>
		<xsl:text>import java.io.File;&#xa;</xsl:text>
		<xsl:text>import java.io.IOException;&#xa;</xsl:text>
		<xsl:text>import java.io.InputStreamReader;&#xa;</xsl:text>
		<xsl:text>import java.io.PrintWriter;&#xa;</xsl:text>
		<xsl:text>import java.sql.Connection;&#xa;</xsl:text>
		<xsl:text>import java.sql.DriverManager;&#xa;</xsl:text>
		<xsl:text>import java.sql.ResultSet;&#xa;</xsl:text>
		<xsl:text>import java.sql.SQLException;&#xa;</xsl:text>
		<xsl:text>import java.sql.Statement;&#xa;</xsl:text>
		<xsl:text>import java.util.Properties;&#xa;</xsl:text>
		<xsl:text>import javax.servlet.ServletException;&#xa;</xsl:text>
		<xsl:text>import javax.servlet.annotation.WebServlet;&#xa;</xsl:text>
		<xsl:text>import javax.servlet.http.HttpServlet;&#xa;</xsl:text>
		<xsl:text>import javax.servlet.http.HttpServletRequest;&#xa;</xsl:text>
		<xsl:text>import javax.servlet.http.HttpServletResponse;&#xa;</xsl:text>
		<xsl:text>import javax.servlet.http.HttpSession;&#xa;</xsl:text>
		<xsl:text>import javax.xml.parsers.DocumentBuilder;&#xa;</xsl:text>
		<xsl:text>import javax.xml.parsers.DocumentBuilderFactory;&#xa;</xsl:text>
		<xsl:text>import org.w3c.dom.Document;&#xa;</xsl:text>
    	<xsl:text>import org.w3c.dom.Element;&#xa;</xsl:text>
    	<xsl:text>import org.w3c.dom.NodeList;&#xa;</xsl:text>
		<xsl:text>&#xa;</xsl:text>
		<xsl:text>public class </xsl:text>
		<xsl:value-of select="$tableName"/>
		<xsl:text>Servlet extends HttpServlet {&#xa;</xsl:text>
		<xsl:text>	private static final long serialVersionUID = 1L;&#xa;</xsl:text>
		<xsl:text>  protected String database = "";&#xa;</xsl:text>
		<xsl:text>  protected String port = "";&#xa;</xsl:text>
		<xsl:text>  protected String username = "";&#xa;</xsl:text>
		<xsl:text> 	protected String password = "";&#xa;</xsl:text>
		<xsl:text>&#xa;	public </xsl:text> 
		<xsl:value-of select="$tableName"/>
		<xsl:text>Servlet() {&#xa;</xsl:text> 										  											
		<xsl:text>     parseXML("/Users/emperor1412/Desktop/ServerConfig.xml");</xsl:text> 			
		<xsl:text>&#xa;	}&#xa;</xsl:text>
		<xsl:text>	public boolean ExecuteQuery(String sql)&#xa;</xsl:text>
		<xsl:text>	{&#xa;</xsl:text>
		<xsl:text>		boolean result = true;&#xa;</xsl:text>
		<xsl:text>		try&#xa;</xsl:text>
		<xsl:text>		{&#xa;</xsl:text>
		<xsl:text>			Class.forName("org.postgresql.Driver");&#xa;</xsl:text>
		<xsl:text>			String url = "jdbc:postgresql://localhost:"+ (port.equalsIgnoreCase("") ? "5432" : port ) +"/"+ (database.equalsIgnoreCase("") ? "buzzcomm" : database ) ;&#xa;</xsl:text>
		<xsl:text>			Properties props = new Properties();&#xa;</xsl:text>
		<xsl:text>			props.setProperty("user", username.equalsIgnoreCase("") ? "postgres" : username );&#xa;</xsl:text>
		<xsl:text>			props.setProperty("password",password.equalsIgnoreCase("") ? "123456" : password );&#xa;</xsl:text>
		<xsl:text>			Connection connection = DriverManager.getConnection(url, props);&#xa;</xsl:text>
		<xsl:text>			Statement stmt = connection.createStatement();&#xa;</xsl:text>
		<xsl:text>			result = stmt.execute(sql);&#xa;</xsl:text>
		<xsl:text>			stmt.close();&#xa;</xsl:text>
		<xsl:text>			connection.close();&#xa;</xsl:text>
		<xsl:text>		}&#xa;</xsl:text>
		<xsl:text>		catch(ClassNotFoundException ex){&#xa;</xsl:text>
		<xsl:text>			ex.printStackTrace();&#xa;</xsl:text>
		<xsl:text>		}&#xa;</xsl:text>
		<xsl:text>		catch (SQLException ex)&#xa;</xsl:text>
		<xsl:text>		{&#xa;</xsl:text>
		<xsl:text>			ex.printStackTrace();&#xa;</xsl:text>
		<xsl:text>		}&#xa;</xsl:text>
		<xsl:text>		return result;&#xa;</xsl:text>
		<xsl:text>	}&#xa;</xsl:text>
		<xsl:text>&#xa;</xsl:text>
		
		<xsl:text>protected void parseXML(String filename) {&#xa;</xsl:text>
		<xsl:text>	try {&#xa;</xsl:text>
		<xsl:text>		System.out.println("filename : " + filename);&#xa;</xsl:text>
		<xsl:text>		File file = new File(filename);&#xa;</xsl:text>	
		<xsl:text>      if (file.exists()) {&#xa;</xsl:text>
    	<xsl:text>        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();&#xa;</xsl:text>
    	<xsl:text>        DocumentBuilder builder = factory.newDocumentBuilder();&#xa;</xsl:text>
    	<xsl:text>        Document doc = builder.parse(filename);&#xa;</xsl:text>
    	<xsl:text>        NodeList list = doc.getElementsByTagName("*");&#xa;</xsl:text>
    	<xsl:text>        for (int i = 0; i </xsl:text>
    	<xsl:text disable-output-escaping="yes">&lt;</xsl:text>
    	<xsl:text> list.getLength(); i++) {&#xa;</xsl:text>
    	<xsl:text>          Element element = (Element) list.item(i);				&#xa;</xsl:text>
    	<xsl:text>          System.out.println(element.getNodeName()+" : "+element.getTextContent());&#xa;</xsl:text>
    	<xsl:text>          if (element.getNodeName().equalsIgnoreCase("database")) {&#xa;</xsl:text>
    	<xsl:text>            database = element.getTextContent(); &#xa;</xsl:text>
    	<xsl:text>          } else if (element.getNodeName().equalsIgnoreCase("port")) {&#xa;</xsl:text>
    	<xsl:text>            port = element.getTextContent();&#xa;</xsl:text>
    	<xsl:text>          } else if (element.getNodeName().equalsIgnoreCase("username")) {&#xa;</xsl:text>
    	<xsl:text>            username = element.getTextContent();&#xa;</xsl:text>
    	<xsl:text>          } else if (element.getNodeName().equalsIgnoreCase("password")) {&#xa;</xsl:text>
    	<xsl:text>            password = element.getTextContent();&#xa;</xsl:text>
    	<xsl:text>        }&#xa;</xsl:text>
    	<xsl:text>      }&#xa;</xsl:text>

    	<xsl:text>    } else {&#xa;</xsl:text>
    	<xsl:text>        System.out.print("File not found!");&#xa;</xsl:text>
    	<xsl:text>    }&#xa;</xsl:text>
    	<xsl:text>  } catch (Exception e) {&#xa;</xsl:text>
    	<xsl:text>      System.exit(1);&#xa;</xsl:text>
    	<xsl:text>  }&#xa;</xsl:text>
    	<xsl:text>}&#xa;</xsl:text>

    	<xsl:text>protected void insertRecord( </xsl:text>
		<xsl:apply-templates select="report/section[@name='Columns']/table" mode="SERVLET_INSERT3"/>
    	<xsl:text> ){&#xa;</xsl:text>		
		<xsl:text>			String query = "select sp_</xsl:text>
		<xsl:value-of select="$tableName" />
		<xsl:text>_insert(</xsl:text>
		<xsl:apply-templates select="report/section[@name='Columns']/table" mode="SERVLET_INSERT2"/>
		<xsl:text>+");";&#xa;</xsl:text>
		<xsl:text>			ExecuteQuery(query);&#xa;</xsl:text>
		<xsl:text>}&#xa;</xsl:text>
		
		<xsl:text>	protected void processRequest(HttpServletRequest request, HttpServletResponse response)&#xa;</xsl:text>
		<xsl:text>	throws ServletException, IOException {&#xa;</xsl:text>
		<xsl:text>		response.setContentType("text/html;charset=UTF-8");&#xa;</xsl:text>
		<xsl:text>		PrintWriter out = response.getWriter();&#xa;</xsl:text>
		<xsl:text>		HttpSession session = request.getSession(true);&#xa;</xsl:text>
		<xsl:text>		try{&#xa;</xsl:text>
		<xsl:apply-templates select="report/section[@name='Columns']/table" mode="SERVLET_INSERT"/>
		<xsl:text>&#xa;</xsl:text>
		
		<xsl:text>		}&#xa;</xsl:text>
		<xsl:text>		catch (Exception ex){&#xa;</xsl:text>
		<xsl:text>			System.out.println("there is error");&#xa;</xsl:text>
		<xsl:text>			ex.printStackTrace();&#xa;</xsl:text>
		<xsl:text>		}&#xa;</xsl:text>
		<xsl:text>		finally{&#xa;</xsl:text>
		<xsl:text>			out.close();&#xa;</xsl:text>
		<xsl:text>		}&#xa;</xsl:text>
		<xsl:text>	}&#xa;</xsl:text>
		<xsl:text>&#xa;</xsl:text>
		<xsl:text>	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {&#xa;</xsl:text>
		<xsl:text>		processRequest(request, response);&#xa;</xsl:text>
		<xsl:text>	}&#xa;</xsl:text>
		<xsl:text>	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {&#xa;</xsl:text>
		<xsl:text>		processRequest(request, response);&#xa;</xsl:text>
		<xsl:text>	}&#xa;</xsl:text>
		<xsl:text>&#xa;</xsl:text>
		<xsl:text>}&#xa;</xsl:text>
	</xsl:template>
	
	<xsl:template match="report/section[@name='Columns']/table" mode="SERVLET_INSERT3">
		<xsl:for-each select="rows/row[@c4!='Yes' and @c5='' and @c1!='deletion_time' and @c1!='updator']"> <!--check not sequence  -->						
			<xsl:text>String </xsl:text>
			<xsl:value-of select="@c1"/>
			<xsl:if test="position()!=last()">
				<xsl:text>, </xsl:text>	
			</xsl:if>
		</xsl:for-each>
	</xsl:template>
	
	<xsl:template match="report/section[@name='Columns']/table" mode="SERVLET_INSERT2">
		<xsl:for-each select="rows/row[@c4!='Yes' and @c5='' and @c1!='deletion_time' and @c1!='updator']"> <!--check not sequence  -->
			
			<xsl:value-of select="@c2"/>
			<xsl:text> '" + </xsl:text>
			<xsl:value-of select="@c1"/>
			<xsl:text> + "'" </xsl:text>
			<xsl:if test="position()!=last()">
				<xsl:text> +", </xsl:text>	
			</xsl:if>
		</xsl:for-each>
	</xsl:template>
	
	<xsl:template match="report/section[@name='Columns']/table" mode="SERVLET_INSERT">
		<xsl:for-each select="rows/row[@c4!='Yes' and @c5='' and @c1!='deletion_time' and @c1!='updator']"> <!--check not sequence  -->
			<xsl:text>			String </xsl:text><xsl:value-of select="@c1"/><xsl:text> = request.getParameter("</xsl:text><xsl:value-of select="@c1"/><xsl:text>");&#xa;</xsl:text>
		</xsl:for-each>
		
		<xsl:text>&#xa; 		insertRecord( </xsl:text>
		<xsl:for-each select="rows/row[@c4!='Yes' and @c5='' and @c1!='deletion_time' and @c1!='updator']"> <!--check not sequence  -->
			<xsl:value-of select="@c1"/>
			<xsl:if test="position()!=last()">
				<xsl:text>, </xsl:text>	
			</xsl:if>
		</xsl:for-each>
		<xsl:text> );</xsl:text>			
		
	</xsl:template>
</xsl:stylesheet>